package co.edu.javeriana.konigsberg.xavier.servicio;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import co.edu.javeriana.konigsberg.xavier.dao.desc.ObservacionDAOLocal;
import co.edu.javeriana.konigsberg.xavier.dao.desc.ProgramaDAOLocal;
import co.edu.javeriana.konigsberg.xavier.dto.ObservacionDTO;
import co.edu.javeriana.konigsberg.xavier.entidad.Observacion;

@Stateless
public class ObservacionServicio implements ObservacionServicioRemote, ObservacionServicioLocal{

	@EJB
	private ObservacionDAOLocal observacionDAOLocal;
	
	@EJB
	private ProgramaDAOLocal programaDAOLocal;
	
	@Override
	public void guardarObservaciones(List<ObservacionDTO> observaciones) {
		
		for (ObservacionDTO observacionDTO : observaciones) {
			Observacion observacion = getEntity(observacionDTO);
			observacionDAOLocal.guardar(observacion);
		}
		
	}

	private Observacion getEntity(ObservacionDTO observacionDTO) {
		Observacion observacion = new Observacion();
		observacion.setFecha(observacionDTO.getFecha());
		observacion.setObservacion(observacionDTO.getObservacion());
		observacion.setUsuario(observacionDTO.getUsuario());
		observacion.setPrograma(programaDAOLocal.obtenerPorId(observacionDTO.getIdPrograma()));
		return observacion;
	}

	private ObservacionDTO getDTO(Observacion observacion) {
		ObservacionDTO observacionDTO = new ObservacionDTO();
		observacionDTO.setFecha(new Date());
		observacionDTO.setObservacion(observacion.getObservacion());
		observacionDTO.setUsuario(observacion.getUsuario());
		observacionDTO.setIdPrograma(observacion.getPrograma().getIdPrograma());
		return observacionDTO;
	}
	
	@Override
	public List<ObservacionDTO> consultarObservaciones(BigInteger idPrograma) {
		List<Observacion> observacions = observacionDAOLocal.obtenerListaPorPadre(idPrograma);
		List<ObservacionDTO> observacionDTOs = new ArrayList<ObservacionDTO>();
		for (Observacion observacion : observacions) {
			ObservacionDTO observacionDTO = getDTO(observacion);
			observacionDTOs.add(observacionDTO);
		}
		return observacionDTOs;
	}

	@Override
	public void eliminarObservaciones(BigInteger idPrograma) {
		observacionDAOLocal.eliminarObservaciones(idPrograma);
	}

}
